package sys

import (
	"ginweb-admin/global"
	"ginweb-admin/model/commons/request"
	"ginweb-admin/model/context"
	"ginweb-admin/model/entity/sys"
)

type SysRoleService struct{}

// 创建角色
func (service *SysRoleService) CreateData(sysRole sys.SysRole) (err error) {
	err = global.DB.Model(sysRole).Create(&sysRole).Error
	return
}

// 修改系统角色
func (service *SysRoleService) UpdateData(sysRole *sys.SysRole, mapField *map[string]any) (err error) {
	err = global.DB.Unscoped().Model(sysRole).Updates(mapField).Error
	return err
}

// 修改系统角色状态
func (service *SysRoleService) UpdateStatus(status context.StatusContext) (err error) {
	sysRole := sys.SysRole{}
	err = global.DB.Model(sysRole).Unscoped().Where("id = ?", status.Id).Update(status.Field, status.Value).Error
	return err
}

// 单个删除系统角色（根据id删除）
func (service *SysRoleService) DeleteById(id uint) (err error) {
	var sysRole sys.SysRole
	err = global.DB.Unscoped().Where("id = ? ", id).Delete(&sysRole).Error
	return err
}

// 批量删除系统角色
func (service *SysRoleService) DeleteByIds(sysRole []*sys.SysRole) (err error) {
	err = global.DB.Unscoped().Delete(&sysRole).Error
	return err
}

// 根据角色名查询角色表
func (service *SysRoleService) FindName(roleName string) (sysRole sys.SysRole, err error) {
	err = global.DB.Model(sysRole).Unscoped().Where("role_name = ? ", roleName).Find(&sysRole).Error
	return sysRole, err
}

// 查询所有的角色信息
func (service *SysRoleService) FindList(keyword string) (sysRoles []*sys.SysRole, err error) {
	tx := global.DB.Unscoped().Order("id asc")

	// 检索条件
	if len(keyword) > 0 {
		tx = tx.Where("role_name like ?", "%"+keyword+"%")
	}
	// 查询
	err = tx.Find(&sysRoles).Error
	// 返回
	return sysRoles, err
}

// 根据id查询系统用户信息
func (service *SysRoleService) GetById(id uint) (sysRole *sys.SysRole, err error) {
	err = global.DB.Unscoped().Where("id = ?", id).Find(&sysRole).Error
	return
}

// 分页查询系统角色信息
func (service *SysRoleService) LoadPage(info request.PageInfo) (list interface{}, total int64, err error) {
	// 获取分页的参数信息
	limit := info.PageSize
	offset := info.PageSize * (info.Page - 1)

	// 查询数据库的表
	db := global.DB.Model(sys.SysRole{})

	// 准备切片存放数据
	var sysRoles []*sys.SysRole

	// 查询系统角色

	// 添加检索条件
	if info.Keyword != "" {
		db = db.Where("role_name like ? or role_code like ?", "%"+info.Keyword+"%", "%"+info.Keyword+"%")
	}
	// 排序默时间降序降序
	db = db.Order("create_time desc")

	// 查询总数
	// Unscoped 删除和未删除的都会查询出来
	err = db.Unscoped().Count(&total).Error
	if err != nil {
		return sysRoles, total, err
	} else {
		// 执行查询
		err = db.Unscoped().Limit(limit).Offset(offset).Find(&sysRoles).Error
	}

	// 结果返回
	return sysRoles, total, err
}
